package br.com.javajsf.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.javajsf.connection.ConnectionFactory;
import br.com.javajsf.modelo.Pedido;


public class PedidoDao {
	
	//Connection con = ConnectionFactory.getConnection();
	
	public void gravar(Pedido pedido){
		String sql = "INSERT INTO PEDIDO(COD_CLIENTE,DATA_PEDIDO,COD_PRODUTO,QTDE,VALOR)" + " VALUES (?,?,?,?,?)";
		PreparedStatement pstm = null;
		Date data = new Date(pedido.getDtCompra().getTime());
		try(Connection con = ConnectionFactory.getConnection()) {
			pstm = con.prepareStatement(sql);
			pstm.setInt(1, pedido.getCliente().getCod());
			pstm.setDate(2, data);
			pstm.setInt(3, pedido.getProduto().getCod());
			pstm.setInt(4, pedido.getQtde());
			pstm.setDouble(5, pedido.getProduto().getValor());
			pstm.execute();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally{
			try {
				pstm.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public Object buscarCod(int cod) {
		String sql = "SELECT * FROM PEDIDO WHERE COD = ?";
		Pedido pedido = new Pedido();
		PreparedStatement pstm = null;
		try(Connection con = ConnectionFactory.getConnection()) {

			pstm = con.prepareStatement(sql);
			pstm.setInt(1, cod);
			ResultSet rs = pstm.executeQuery();
			if (rs.next()) {
				pedido.setCod(rs.getInt(1));
				pedido.getCliente().setCod(rs.getInt(2));
				pedido.setDtCompra(rs.getDate(3));
				pedido.getProduto().setCod(rs.getInt(4));
				pedido.setQtde(rs.getInt(5));
				pedido.getProduto().setValor(rs.getInt(6));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				pstm.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return pedido;
	}

	public List<Pedido> listarPedidosCliente(int codCliente) {
		String sql = "SELECT * FROM PEDIDO WHERE COD_CLIENTE = ? ORDER BY DATA_PEDIDO ASC";
		List<Pedido> listaPed = new ArrayList<Pedido>();
		PreparedStatement pstm = null;
		try(Connection con = ConnectionFactory.getConnection()) {

			pstm = con.prepareStatement(sql);
			pstm.setInt(1, codCliente);
			ResultSet rs = pstm.executeQuery();
			while (rs.next()) {
				Pedido ped = new Pedido();
				ped.setCod(rs.getInt(1));
				ped.getCliente().setCod(rs.getInt(2));
				ped.setDtCompra(rs.getDate(3));
				ped.getProduto().setCod(rs.getInt(4));
				ped.setQtde(rs.getInt(5));
				ped.getProduto().setValor(rs.getDouble(6));
				listaPed.add(ped);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				pstm.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return listaPed;
	}

	public List<Pedido> listarTodos() {
		String sql = "SELECT * FROM PEDIDO";
		List<Pedido> listaPed = new ArrayList<Pedido>();
		PreparedStatement pstm = null;
		
		try(Connection con = ConnectionFactory.getConnection()) {
			pstm = con.prepareStatement(sql);
			ResultSet rs = pstm.executeQuery();
			while (rs.next()) {
				Pedido ped = new Pedido();
				ped.setCod(rs.getInt(1));
				ped.getCliente().setCod(rs.getInt(2));
				ped.setDtCompra(rs.getDate(3));
				ped.getProduto().setCod(rs.getInt(4));
				ped.setQtde(rs.getInt(5));
				ped.getProduto().setValor(rs.getDouble(6));
				listaPed.add(ped);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				pstm.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return listaPed;
	}
	
}
